package com.weimob.mcloud.wechatwork.customer.service;

import com.weimob.mcloud.wechatwork.customer.service.user.base.PageResponse;
import com.weimob.mcloud.wechatwork.customer.service.user.module.bo.group.*;
import com.weimob.mcloud.wechatwork.customer.service.user.module.dto.group.*;
import com.weimob.mcloud.wechatwork.customer.service.user.module.model.group.SimpleGroupModel;
import lombok.NonNull;

import java.util.List;

/**
 * @author liuzhu.chen
 * @date 2021/10/25
 */
public interface GroupService {
    /**
     * 客户群列表
     * @param dto
     * @return
     */
    PageResponse<CorpChatGroupListBO> listGroupJoinStore(@NonNull CorpChatGroupQueryDTO dto);

    /**
     * 客户群成员列表
     * @param dto
     * @return
     */
    PageResponse<CorpChatGroupMemberBO> memberList(@NonNull CustomerGroupMemberQueryDTO dto);

    /**
     * 群成员列表导出
     * @param dto
     * @return
     */
    Boolean memberExport(CustomerGroupMemberQueryDTO dto);

    /**
     * 群列表导出
     * @param dto
     * @return
     */
    Boolean export(CorpChatGroupQueryDTO dto);

    /**
     * 客户群和门店关系导入
     * @param dto
     * @return
     */
    RetailStoreExcelBO importExcel(RetailStoreExcelImportDTO dto);

    /**
     * 查询客户群详情
     * @param corpChatGroupDetailDTO
     * @return
     */
    CorpChatGroupDetailBO queryDetail(CorpChatGroupDetailDTO corpChatGroupDetailDTO);

    /**
     * 获取群信息携带 "充血" 群成员
     * @param simpleGroupQueryDTO simpleGroupModel
     * @return simpleGroupModel
     */
    SimpleGroupModel fetchGroupWithRichMember(SimpleGroupQueryDTO simpleGroupQueryDTO);

    /**
     * 根据群成员查群
     * 当externalUserId 和 employeeId 同时存在时 以externalUserId为主
     * @param customerChatGroupDTO
     * @return
     */
    PageResponse<CustomerChatGroupBO> getGroupChatListByMember(CustomerChatGroupDTO customerChatGroupDTO);

    RetailStoreModifyBO batchModifyStore(RetailStoreModifyDTO dto);

    RetailStoreModifyBO batchRelieveStore(RetailStoreModifyDTO dto);

    /**
     * 获取客户群统计统计信息
     * @param dto dto
     * @return GroupStatisticListBO
     */
    List<GroupStatisticListBO> batchFetchGroupStatisticInfo(GroupStatisticQueryDTO dto);

    /**
     * 根据客户wid查询客户群列表信息,附带最早入群时间
     * @param customerChatGroupDTO
     * @return
     */
    PageResponse<CorpChatGroupListBO> getGroupChatListByWid(CustomerChatGroupDTO customerChatGroupDTO);
}
